package com.dkm.orproject.dkmoa.service.serviceimpl;

import com.dkm.orproject.dkmoa.dao.OaLogMapper;
import com.dkm.orproject.dkmoa.domain.OaLog;
import com.dkm.orproject.dkmoa.service.OaLogService;
import com.dkm.orproject.utils.utils.IdToobtainUtils;
import com.github.pagehelper.PageHelper;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.ObjectUtils;

import javax.annotation.Resource;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @ClassName : OaLogServiceImpl  //类名
 * @Description :   日志服务接口实现类//描述
 * @Author : 易嵘  //作者
 * @Date: 2020-07-30 14:35  //时间
 */
@Service
@Transactional(rollbackFor = Exception.class)
public class OaLogServiceImpl implements OaLogService {

    /**
     * 日志dao
     */
    @Resource
    OaLogMapper logMapper;

    /**
     * id生成工具
     */
    @Resource
    IdToobtainUtils idToobtainUtils;

    /**
     * 新增日志
     * @param log 日志模型
     * @return
     */
    @Override
    public int addLog(OaLog log) {
        if(ObjectUtils.isEmpty(log)){
            return 1;
        }
        //日志id
        log.setPkLogId(idToobtainUtils.getNumberId());
        //存入数据库
        return logMapper.insertSelective(log);
    }

    /**
     * 分页查询
     *
     * @param log       日志模型用于条件查询
     * @param page      当前页数
     * @param limit     显示行数
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @return 日志集合
     */
    @Override
    public List<OaLog> findAll(OaLog log, Integer page, Integer limit, String startTime, String endTime) {
        //分页插件
        PageHelper.startPage(page, limit);
        //查询日志
        return logMapper.findAll(log, startTime, endTime);
    }

    /**
     * 查询总行数
     *
     * @param log       日志模型用于条件查询
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @return 总行数
     */
    @Override
    public Long rowCount(OaLog log, String startTime, String endTime) {
        return logMapper.rowCount(log, startTime, endTime);
    }

    /**
     * id删除
     *
     * @param id 日志id
     * @return 回调函数
     */
    @Override
    public Map<String, Object> deleteById(Long id) {
        Map<String, Object> map = new HashMap<>();
        try {
            int row = logMapper.deleteByPrimaryKey(id);
            if (row > 0) {
                map.put("code", 1);
                map.put("msg", "删除成功");
            } else {
                map.put("code", 0);
                map.put("msg", "删除失败");
            }
        } catch (Exception e) {
            map.put("code", 500);
            map.put("msg", e.getMessage());
        }
        return map;
    }

    /**
     * 批量删除
     *
     * @param ids 日志id数组
     * @return 回调函数
     */
    @Override
    public Map<String, Object> deleteAll(Long[] ids) {
        Map<String, Object> map = new HashMap<>();
        try {
            List<Long> longs = Arrays.asList(ids);
            int row = logMapper.deleteAll(longs);
            if (row > 0) {
                map.put("code", 1);
                map.put("msg", "删除成功");
            } else {
                map.put("code", 0);
                map.put("msg", "删除失败");
            }
        } catch (Exception e) {
            map.put("code", 500);
            map.put("msg", e.getMessage());
        }
        return map;
    }

    /**
     * 日志id查询
     * @param id 日志id
     * @return 日志模型
     */
    @Override
    public OaLog findById(Long id) {
        return logMapper.selectByPrimaryKey(id);
    }
}
